﻿using System.Collections.Generic;
using System.Windows;
using System.Windows.Forms;
using CapstoneProjectAEReader.Entities.Models;
using System.Windows.Controls;

namespace CapstoneProjectAEReader.Business.E_book_Reader
{
// ReSharper disable InconsistentNaming
    public class IBook : System.Windows.Forms.UserControl
// ReSharper restore InconsistentNaming
    {
       
        #region Methods
        /// <summary>
        /// Display next page
        /// </summary>
        public virtual void DisplayNextPage() {}

        /// <summary>
        /// Display previous page
        /// </summary>
        public virtual void DisplayPrevioudPage() {}

        /// <summary>
        /// Display first page
        /// </summary>
        public virtual void DisplayFirstPage(){}

        /// <summary>
        /// Display last page
        /// </summary>
        public virtual void DisplayLastPage(){}

        /// <summary>
        /// Zoom in
        /// </summary>
        public virtual void ZoomIn(){}

        /// <summary>
        /// Zoom out
        /// </summary>
        public virtual void ZoomOut(){}

        /// <summary>
        /// Go to specific page
        /// </summary>
        /// <param name="pageNumber">Desired Page Number</param>
        public virtual void GoToPage(int pageNumber){}

        /// <summary>
        /// Open Note Form
        /// </summary>
        /// <param name="selectedContent">selected content</param>
        public virtual string GetSelectedText()
        {
            return null;
        }

        /// <summary>
        /// Add new bookmark
        /// </summary>
        /// <param name="tempBm">new bookmark</param>
        public virtual void AddBookmark(RoutedPropertyChangedEventArgs<object> e, string strSelectedItem, string strAddingItem, string strPageNumber) { }

        /// <summary>
        /// Delete bookmark
        /// </summary>
        /// <param name="tempBm"></param>
        public virtual void DeleteBookmark(RoutedPropertyChangedEventArgs<object> e, string strSelectedItem) { }

        /// <summary>
        /// Update bookmark
        /// </summary>
        /// <param name="tempBm"></param>
        public virtual void UpdateBookmark(RoutedPropertyChangedEventArgs<object> e, string strSelectedItem, string strAddingItem) { }

        /// <summary>
        /// Search for content
        /// </summary>
        /// <param name="content">desired texts</param>
        public virtual void SearchContent(string content){}

        /// <summary>
        /// Load Bookmark
        /// </summary>
        /// <returns></returns>
        public virtual void LoadBookmark(System.Windows.Controls.TreeView treeView, string strXmlFilePath)
        {
            //return null;
        }

        /// <summary>
        /// Load notes which belong to a specific page
        /// </summary>
        /// <param name="pageNumber"></param>
        /// <returns></returns>
        public virtual List<Note> LoadNotesOfPage(int pageNumber)
        {
            return null;
        }

        /// <summary>
        /// Dispose Control
        /// </summary>
        public virtual void DisposeControl(){}

        public virtual void PressKeys() { }

        public virtual void DisposeControl(bool disposing) { }

        public virtual string GetBookmarkPageNumber(RoutedPropertyChangedEventArgs<object> e, string strSelectedItem)
        {
            return null;
        }

        #endregion

        //Epub Check Page
        public virtual string CheckCurrentPage() { return null; }
        public virtual string CheckLoading(){ return null; }

        public virtual Ebook GenerateEbookObj(string fileName) 
        {
            return null;
        }

        public virtual void GetPdfThumbnail(string sourcePdfFilePath, string destinationPngFilePath) { }

        public virtual void SetReadingMode(int mode) { }
        public virtual void SetFontSize(int size) { }
        public virtual void SetFontType(string type) { }
    }
}
